home *** CD-ROM | disk | FTP | other *** search
- ; *******************************************
- ; * This is one of the fastes Line-Routine. *
- ; * At the moment without clipping. *
- ; *******************************************
- ;
- ;
- ; This Sources is done by MCM/Complex and improved by Tron/Sanity
- ;
- ;
-
-
-
-
-
-
- org $20000
- load $20000
-
- WaitBlit MACRO
- .\@1 BTST #14,2(A5)
- BNE.S .\@1
- ENDM
-
- Plane = $50000
-
- J:
- move.l #More,$80.W
- trap #0
- rts
-
- MORE:
- move.w #$2700,sr
- lea $DFF000,A5
- bsr clear
- bsr InitBlitSizes
- bsr InitYPosTab
- move.l #ucp,$84(a5)
- bsr InitLine
-
- lea Plane,A0
- move #0,d0
- move #0,d1
- move #100,d2
- move #100,d3
- bsr BlitLine
-
- Wait:
- btst #2,$16(a5)
- bne.s Wait
-
- move.w #$2000,sr
- rte
-
- Clear:
- lea Plane,a0
- move.w #101*40/4-1,d1
- moveq #0,d0
- Clear0:
- move.l d0,(a0)+
- dbf d1,Clear0
-
- move.w #156*40/4-1,d1
- * move.l #$AAAAAAAA,d0
- Clear1:
- move.l d0,(a0)+
- dbf d1,Clear1
- rts
-
- UCP:
- dc.w $96,$87C0,$108,0,$8e,$2981,$90,$29c1,$92,$38,$94,$d0
- dc.w $e0,Plane/$10000,$e2,Plane&$FFFF,$100,$1200,$102,0
- dc.l $fffffffe
-
- InitBlitSizes:
- LEA LINE_BlitSizes(PC),A0
- MOVEQ #0,D0
- MOVE.W #$3FF,D2
- .loop
- MOVE D0,D1
- LSL.W #6,D1
- ADDQ.W #2,D1
- MOVE D1,(A0)+
- ADDQ.W #1,D0
- DBF D2,.loop
- RTS
-
- InitYPosTab:
- LEA YPosTab(PC),A0
- MOVEQ #0,D0
- MOVE.W #255,D1
- .loop
- MOVE D0,(A0)+
- ADD.W #40,D0
- DBF D1,.loop
- RTS
-
- InitLine:
- WaitBlit
- MOVEQ #-1,D0
- MOVE.L D0,$44(A5) ;BLTAFWM = $FFFF (BLTALWM egal!)
- MOVE.L #$FFFF8000,$72(A5) ;BLTBDAT = Maske, BLTADAT = $8000
- MOVE.W #$0028,$60(A5) ;BLTCMOD = Breite der Plane
- MOVE.W #0,$42(A5) ;BLTCON1 löschen
- LEA YPosTab(PC),A1
- LEA LINE_BlitSizes(PC),A2
- RTS
-
- *-------------------------------- BlitLine -----------------------------*
- *
- * IN: D0/D1 x1,y1
- * D2/D3 x2,y3
- * A0 Plane
- * A1 (*) YPosTab
- * A2 (*) LINE_BlitSizes
- * A5 (*) Custom-Base $DFF000
- *
- * D4 work register
- *
- * (*) will remain untouched
- BlitLine:
- CMP.W D1,D3 ;Blitter im Single-Modus
- BEQ.S .end ;--> Keine horizontalen Linien!!!
- BGT.S .y2_gt_y1 ;Y2 > Y1 ??? Ja --> branch
- EXG D0,D2 ;Nein --> Oktanten "klappen"
- EXG D1,D3 ;--> Nur Oktanten 4,5,6,7 möglich!!!
- .y2_gt_y1
- MOVE D1,D4
- ADD D4,D4
- ADD.W (A1,D4.W),A0
- MOVE D0,D4
- ASR.W #3,D4
- LEA (A0,D4.W),A0
-
- MOVEQ #1,D4 ;Oktant 6/7
- SUB D0,D2 ;X2 > X1 (DeltaX)
- BPL.S .x2_gt_x1 ;DeltaX positiv --> Oktant 6/7
- NEG D2 ;DeltaX negativ --> Positiv machen
- MOVEQ #0,D4 ;jetzt nur noch Oktanten 4/5 möglich!!!
- .x2_gt_x1
- SUB D1,D3 ;DeltaY
-
-
- MOVE D3,D1
- ADD D1,D1
- CMP.W D2,D1
- DBHI D3,.1
- .1
- MOVE D3,D1
- SUB D2,D1 ;DeltaY > Delta X ??? (SUB.W wegen X-Flag!!!!)
- BGT.S .dy_gt_dx ;Ja --> D3 schon GDelta und D2 KDelta
- EXG D2,D3 ;Nein -> D3 zu GroßDelta, D2 zu KDelta machen
- .dy_gt_dx
- ADDX D4,D4 ;D4 mit D4 und X-Flag addieren
- ;bei Oktant 4/5 (D4=0) und dy>dx -> X-Flag=0 -> D4=0 OKT 5
- ;bei Oktant 4/5 (D4=0) und dy<dx -> X-Flag=1 -> D4=1 OKT 4
- ;bei Oktant 6/7 (D4=1) und dy>dx -> X-Flag=0 -> D4=2 OKT 6
- ;bei Oktant 6/7 (D4=1) und dy<dx -> X-Flag=1 -> D4=3 OKT 7
-
- ADD D2,D2 ;2*KDelta
- MOVE D2,D1
- SUB D3,D2 ;2*KDelta - GDelta
- ADDX D4,D4 ;wenn 2*KDelta - GDelta <0 --> SIGN-Bit setzen!
-
- ADD D0,D0
- ANDI.W #$001F,D0
-
- WaitBlit
- MOVE BltCon0(PC,D0.W),$40(A5) ;BltCON0 = $xB4A
- MOVE.B BltCon1(PC,D4.W),$43(A5) ;BltCON1 = $00xx
-
- MOVE D2,$52(A5) ;BLTAPTL = 2*KDelta - GDelta
- SUB D3,D2 ;D2 = 2*KDelta - 2*GDelta
- ADD D3,D3
- MOVEM.W D1/D2,$62(A5) ;BLTBMOD=2*KDelta, BLTAMOD=2*KDelta-2*GDelta
- MOVE.L A0,$48(A5)
- MOVE.L A0,$54(A5)
- MOVE (A2,D3.W),$58(A5)
- .end
- rts
-
- BltCon0:
- DC.W $0B4A,$1B4A,$2B4A,$3B4A,$4B4A,$5B4A,$6B4A,$7B4A
- DC.W $8B4A,$9B4A,$AB4A,$BB4A,$CB4A,$DB4A,$EB4A,$FB4A
- BltCon1:
- DC.B $0B ;Sign 0, Oktant 5, Single, Line
- DC.B $4B ;Sign 1, Oktant 5, Single, Line
- DC.B $17 ;Sign 0, Oktant 4, Single, Line
- DC.B $57 ;Sign 1, Oktant 4, Single, Line
- DC.B $03 ;Sign 0, Oktant 6, Single, Line
- DC.B $43 ;Sign 1, Oktant 6, Single, Line
- DC.B $13 ;Sign 0, Oktant 7, Single, Line
- DC.B $53 ;Sign 1, Oktant 7, Single, Line
-
- LINE_BlitSizes: BLK.W 1024,0
- YPosTab: BLK.W 256,0
-